package cn.edu.ncepu;

import java.util.ArrayList;
import java.util.List;

/**
 * 多项式工具类（实现polynomial_simplify：多项式乘法展开）
 */
public class PolynomialUtils {

    /**
     * 多项式乘法展开（多个一次多项式 (a + b*x) 相乘）
     * @param matrix 一次多项式系数矩阵，每行格式为 [a, b] 对应 (a + b*x)
     * @return 展开后的多项式系数（索引0为最高次项，索引n为常数项）
     */
    public static List<Double> polynomialSimplify(List<List<Double>> matrix) {
        // 初始多项式：1（常数项）
        List<Double> result = new ArrayList<>();
        result.add(1.0);

        // 依次乘以每个一次多项式 (a + b*x)
        for (List<Double> poly : matrix) {
            List<Double> newResult = new ArrayList<>();
            // 初始化新多项式系数为0，长度 = 原长度 + 1
            for (int i = 0; i < result.size() + 1; i++) {
                newResult.add(0.0);
            }

            // 多项式乘法：result * poly
            for (int i = 0; i < result.size(); i++) {
                // 原项：result[i] * x^i
                // 乘以 poly.get(0) (常数项)：result[i] * poly.get(0) * x^i
                newResult.set(i, newResult.get(i) + result.get(i) * poly.get(0));
                // 乘以 poly.get(1) (x项)：result[i] * poly.get(1) * x^(i+1)
                newResult.set(i + 1, newResult.get(i + 1) + result.get(i) * poly.get(1));
            }

            result = newResult;
        }

        return result;
    }
}